﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ThinkGearNET;

namespace MindDrone.MindsetAPI
{
    /// <summary>
    /// MindsetAPI - wrapper global pour gerer le Neurosky
    /// </summary>
    public class WrapperMindset
    {
        /// <summary>
        /// Valeur BAUD (par defaut 57600)
        /// </summary>
        public static int BAUD = 57600;
        /// <summary>
        /// Permet de gerer le casque a travers le wrapper ThinkGearNET <c>ThinkGearWrapper</c> 
        /// </summary>
        private ThinkGearWrapper ThinkGear { get; set; }

        /// <summary>
        /// EventHandler qui notifie quand des nouvelles valeures sont renvoyes du casques
        /// </summary>
        public event EventHandler<MindsetArgs> OnMindsetChanged;

        /// <summary>
        /// Connection au casque
        /// <param name="comPort">Le port bluetooth du casque utilise <c>string</c></param>
        /// <returns>Retourne si il a pu se connecter en <c>bool</c></returns>
        /// </summary>
        public bool Connect(string comPort)
        {
            if (ThinkGear == null)
            {
                ThinkGear = new ThinkGearWrapper();
                ThinkGear.ThinkGearChanged += new EventHandler<ThinkGearChangedEventArgs>(ThinkGear_ThinkGearChanged);
            }

            return ThinkGear.Connect(comPort, WrapperMindset.BAUD, true);
        }

        /// <summary>
        /// Deconnection au casque
        /// </summary>
        /// <returns></returns>
        public void Disconnect()
        {
            if (ThinkGear != null)
                ThinkGear.Disconnect();
            
        }

        private void ThinkGear_ThinkGearChanged(object sender, ThinkGearChangedEventArgs e)
        {
            
            //TODO check errors - low signal etc..
            if (OnMindsetChanged != null)
                OnMindsetChanged(this, new MindsetArgs(e.ThinkGearState));
        }

    }
}
